﻿'######################################################################################################################################
'# CLASSE MENU_CONTEXTUEL:
'######################################################################################################################################
Imports MediaPortal.Dialogs
Imports MediaPortal.GUI.Library
Imports System.IO
Imports SMC.Explorer
Imports SMC.Gestion_XML

Public Class Menu_Contextuel
    Private _Parent As Plugin

    '######################################################################################################################################
    '# Constructeur
    '######################################################################################################################################
    Public Sub New(ByVal CLASS_Param1 As Plugin)
        _Parent = CLASS_Param1
    End Sub
    '######################################################################################################################################

    '######################################################################################################################################
    '# Creation du menu
    '######################################################################################################################################
    Public Sub Afficher()
        MediaPortal.GUI.Library.Log.Debug("[SMC] Menu_Contextuel.vb >> Execution de Afficher()", "")
        Dim DLG_ContextMenu As GUIDialogMenu
        Dim STRUC_XMLElements As STRUC_XML_smc
        Dim STR_NomVideo As String
        Dim BOOL_Supprimer_jaquette As Boolean

        'S'il s'agit d'une video
        If _Parent.SMC_Explorer.Selection_Type > 1 Then

            'On cree le menu
            DLG_ContextMenu = GUIWindowManager.GetWindow(GUIWindow.Window.WINDOW_DIALOG_MENU)
            DLG_ContextMenu.Reset()
            DLG_ContextMenu.ShowQuickNumbers = False
            STR_NomVideo = _Parent.SMC_Explorer.VideoElements(_Parent.SMC_Explorer.INT_Fichier_PositionAbsolue).Nom
            If InStr(STR_NomVideo, ".") > 0 Then STR_NomVideo = Left(STR_NomVideo, InStrRev(STR_NomVideo, ".") - 1)
            DLG_ContextMenu.SetHeading(STR_NomVideo)
            DLG_ContextMenu.Add("RECHERCHE FILM ALLOCINE")
            DLG_ContextMenu.Add("DEPLACER")
            DLG_ContextMenu.Add("SUPPRIMER")
            If _Parent.SMC_Explorer.VideoElements(_Parent.SMC_Explorer.INT_Fichier_PositionAbsolue).Vu > 0 Then
                DLG_ContextMenu.Add("MARQUER COMME NON VU")
            Else
                DLG_ContextMenu.Add("MARQUER COMME VU")
            End If
            DLG_ContextMenu.Add("RENOMMER")

            'On affiche le menu
            DLG_ContextMenu.DoModal(GUIWindowManager.ActiveWindow)

            'Action en fonction du choix de l'utilisateur
            Select Case DLG_ContextMenu.SelectedLabel
                Case 0
                    _Parent.SMC_Allocine.Recherce_Film(_Parent.SMC_Explorer.Selection_Chemin)
                Case 1
                    Deplacer()
                Case 2
                    Supprimer()
                Case 3
                    If _Parent.SMC_Explorer.VideoElements(_Parent.SMC_Explorer.INT_Fichier_PositionAbsolue).Vu > 0 Then
                        STRUC_XMLElements.Vu = 0
                        _Parent.SMC_Explorer.VideoElements(_Parent.SMC_Explorer.INT_Fichier_PositionAbsolue).Vu = 0
                    Else
                        STRUC_XMLElements.Vu = 2
                        _Parent.SMC_Explorer.VideoElements(_Parent.SMC_Explorer.INT_Fichier_PositionAbsolue).Vu = 2
                    End If
                    STRUC_XMLElements.Position = _Parent.SMC_Explorer.Selection_Position
                    STRUC_XMLElements.DVDPosition = _Parent.SMC_Explorer.VideoElements(_Parent.SMC_Explorer.INT_Fichier_PositionAbsolue).DVDPosition
                    STRUC_XMLElements.Duree = _Parent.SMC_Explorer.Selection_Duree
                    STRUC_XMLElements.Synopsis = _Parent.SMC_Explorer.VideoElements(_Parent.SMC_Explorer.INT_Fichier_PositionAbsolue).Synopsis
                    STRUC_XMLElements.DVDPosition = _Parent.SMC_Explorer.VideoElements(_Parent.SMC_Explorer.INT_Fichier_PositionAbsolue).DVDPosition
                    _Parent.SMC_Gestion_XML.EcrireElements(_Parent.SMC_Explorer.Selection_Chemin & ".smc", STRUC_XMLElements)

                    _Parent.SMC_Explorer.EXPLORER_Rafraichir()
                Case 4
                    Renommer()
            End Select
        End If

        'S'il s'agit d'un repertoire
        If _Parent.SMC_Explorer.Selection_Type = 1 Then
            BOOL_Supprimer_jaquette = False
            'On cree le menu
            DLG_ContextMenu = GUIWindowManager.GetWindow(GUIWindow.Window.WINDOW_DIALOG_MENU)
            DLG_ContextMenu.Reset()
            DLG_ContextMenu.ShowQuickNumbers = False
            DLG_ContextMenu.SetHeading(_Parent.SMC_Explorer.VideoElements(_Parent.SMC_Explorer.INT_Fichier_PositionAbsolue).Nom)
            DLG_ContextMenu.Add("RECHERCHE SERIETV ALLOCINE")
            If File.Exists(_Parent.SMC_Explorer.Selection_Chemin & ".j.smc") Then
                BOOL_Supprimer_jaquette = True
                DLG_ContextMenu.Add("SUPPRIMER LA JAQUETTE")
            End If
            DLG_ContextMenu.Add("RENOMMER LE REPERTOIRE")
            DLG_ContextMenu.Add("SUPPRIMER LE REPERTOIRE")

            'On affiche le menu
            DLG_ContextMenu.DoModal(GUIWindowManager.ActiveWindow)

            'Action en fonction du choix de l'utilisateur
            Select Case DLG_ContextMenu.SelectedLabel
                Case 0
                    _Parent.SMC_Allocine.Recherce_Serie(_Parent.SMC_Explorer.Selection_Chemin)
                Case 1
                    If BOOL_Supprimer_jaquette Then
                        If File.Exists(_Parent.SMC_Explorer.Selection_Chemin & ".j.smc") Then
                            File.Delete(_Parent.SMC_Explorer.Selection_Chemin & ".j.smc")
                            _Parent.SKINIMG_Jaquette.SetFileName("")
                        End If
                    Else
                        Renommer()
                    End If
                Case 2
                    If BOOL_Supprimer_jaquette Then
                        Renommer()
                    Else
                        Supprimer_Repertoire()
                    End If
                Case 3
                    Supprimer_Repertoire()
            End Select
        End If

    End Sub
    '######################################################################################################################################


    '######################################################################################################################################
    '# Supprimer la selection
    '######################################################################################################################################
    Public Sub Supprimer()
        MediaPortal.GUI.Library.Log.Debug("[SMC] Menu_Contextuel.vb >> Execution de Supprimer()", "")
        Dim DLG_Supprimer As GUIDialogYesNo
        Dim i As Integer

        'On cree une interface de confirmation
        DLG_Supprimer = GUIWindowManager.GetWindow(GUIWindow.Window.WINDOW_DIALOG_YES_NO)
        DLG_Supprimer.Reset()
        DLG_Supprimer.SetHeading("SUPPRESSION")
        DLG_Supprimer.SetLine(1, "VOULEZ VOUS VRAIMENT SUPPRIMER:")
        DLG_Supprimer.SetLine(2, UCase(_Parent.SMC_Explorer.VideoElements(_Parent.SMC_Explorer.INT_Fichier_PositionAbsolue).Nom))
        DLG_Supprimer.DoModal(GUIWindowManager.ActiveWindow)

        If DLG_Supprimer.IsConfirmed Then
            'On supprime la video
            If _Parent.SMC_Explorer.Selection_Type = 2 Then
                Directory.Delete(_Parent.SMC_Explorer.Selection_Chemin, True)
            Else
                File.Delete(_Parent.SMC_Explorer.Selection_Chemin)
            End If
            'On supprime les fichiers smc supplementaires
            If File.Exists(_Parent.SMC_Explorer.Selection_Chemin & ".smc") Then File.Delete(_Parent.SMC_Explorer.Selection_Chemin & ".smc")
            If File.Exists(_Parent.SMC_Explorer.Selection_Chemin & ".j.smc") Then File.Delete(_Parent.SMC_Explorer.Selection_Chemin & ".j.smc")

            'On retire l'element de la liste
            If UBound(_Parent.SMC_Explorer.VideoElements) > 0 Then
                For i = _Parent.SMC_Explorer.INT_Fichier_PositionAbsolue To UBound(_Parent.SMC_Explorer.VideoElements) - 1
                    _Parent.SMC_Explorer.VideoElements(i) = _Parent.SMC_Explorer.VideoElements(i + 1)
                Next
            End If
            ReDim Preserve _Parent.SMC_Explorer.VideoElements(UBound(_Parent.SMC_Explorer.VideoElements) - 1)

            'S'il n'est pas en haut, on monte le curseur
            If _Parent.SMC_Explorer.INT_Fichier_PositionAbsolue > 0 Then
                _Parent.SMC_Explorer.INT_Fichier_PositionAbsolue -= 1
                _Parent.SMC_Explorer.INT_Fichier_PositionRelative -= 1
            End If

            'On rafraichi l'explorer
            _Parent.SMC_Explorer.EXPLORER_Rafraichir()
        End If
    End Sub
    '######################################################################################################################################

    '######################################################################################################################################
    '# Supprimer le répertoire
    '######################################################################################################################################
    Public Sub Supprimer_Repertoire()
        MediaPortal.GUI.Library.Log.Debug("[SMC] Menu_Contextuel.vb >> Execution de Supprimer_Repertoire()", "")
        Dim DLG_Supprimer As GUIDialogYesNo
        Dim i As Integer

        'On cree une interface de confirmation
        DLG_Supprimer = GUIWindowManager.GetWindow(GUIWindow.Window.WINDOW_DIALOG_YES_NO)
        DLG_Supprimer.Reset()
        DLG_Supprimer.SetHeading("SUPPRESSION")
        DLG_Supprimer.SetLine(1, "VOULEZ VOUS VRAIMENT SUPPRIMER:")
        DLG_Supprimer.SetLine(2, UCase(_Parent.SMC_Explorer.VideoElements(_Parent.SMC_Explorer.INT_Fichier_PositionAbsolue).Nom))
        DLG_Supprimer.DoModal(GUIWindowManager.ActiveWindow)

        If DLG_Supprimer.IsConfirmed Then
            'On supprime la video
            Directory.Delete(_Parent.SMC_Explorer.Selection_Chemin, True)

            If Not Directory.Exists(_Parent.SMC_Explorer.Selection_Chemin) Then
                'On supprime les fichiers smc supplementaires
                If File.Exists(_Parent.SMC_Explorer.Selection_Chemin & ".smc") Then File.Delete(_Parent.SMC_Explorer.Selection_Chemin & ".smc")
                If File.Exists(_Parent.SMC_Explorer.Selection_Chemin & ".j.smc") Then File.Delete(_Parent.SMC_Explorer.Selection_Chemin & ".j.smc")

                'On retire l'element de la liste
                If UBound(_Parent.SMC_Explorer.VideoElements) > 0 Then
                    For i = _Parent.SMC_Explorer.INT_Fichier_PositionAbsolue To UBound(_Parent.SMC_Explorer.VideoElements) - 1
                        _Parent.SMC_Explorer.VideoElements(i) = _Parent.SMC_Explorer.VideoElements(i + 1)
                    Next
                End If
                ReDim Preserve _Parent.SMC_Explorer.VideoElements(UBound(_Parent.SMC_Explorer.VideoElements) - 1)

                'S'il n'est pas en haut, on monte le curseur
                If _Parent.SMC_Explorer.INT_Fichier_PositionAbsolue > 0 Then
                    _Parent.SMC_Explorer.INT_Fichier_PositionAbsolue -= 1
                    _Parent.SMC_Explorer.INT_Fichier_PositionRelative -= 1
                End If

                'On rafraichi l'explorer
                _Parent.SMC_Explorer.EXPLORER_Rafraichir()
            End If
        End If
    End Sub
    '######################################################################################################################################

    '######################################################################################################################################
    '# Renommer un élément
    '######################################################################################################################################
    Public Sub Renommer()
        MediaPortal.GUI.Library.Log.Debug("[SMC] Menu_Contextuel.vb >> Execution de Renommer()", "")
        Dim DLG_VirtualKeyboard As VirtualKeyboard
        Dim i As Integer

        DLG_VirtualKeyboard = GUIWindowManager.GetWindow(GUIWindow.Window.WINDOW_VIRTUAL_KEYBOARD)
        DLG_VirtualKeyboard.Reset()
        DLG_VirtualKeyboard.Text = _Parent.SMC_Explorer.Selection_Nom_Sans_Extention
        DLG_VirtualKeyboard.DoModal(GUIWindowManager.ActiveWindow)

        If DLG_VirtualKeyboard.IsConfirmed And DLG_VirtualKeyboard.Text <> "" Then
            If _Parent.SMC_Explorer.Selection_Type < 3 Then
                Directory.Move(_Parent.SMC_Explorer.Selection_Chemin, Left(_Parent.SMC_Explorer.Selection_Chemin, InStrRev(_Parent.SMC_Explorer.Selection_Chemin, "\")) & DLG_VirtualKeyboard.Text)
            Else
                File.Move(_Parent.SMC_Explorer.Selection_Chemin, Left(_Parent.SMC_Explorer.Selection_Chemin, InStrRev(_Parent.SMC_Explorer.Selection_Chemin, "\")) & DLG_VirtualKeyboard.Text & _Parent.SMC_Explorer.Selection_Extention)
            End If
            ''On renomme les fichiers smc supplementaires
            If File.Exists(_Parent.SMC_Explorer.Selection_Chemin & ".smc") Then File.Move(_Parent.SMC_Explorer.Selection_Chemin & ".smc", Left(_Parent.SMC_Explorer.Selection_Chemin, InStrRev(_Parent.SMC_Explorer.Selection_Chemin, "\")) & DLG_VirtualKeyboard.Text & _Parent.SMC_Explorer.Selection_Extention & ".smc")
            If File.Exists(_Parent.SMC_Explorer.Selection_Chemin & ".j.smc") Then File.Move(_Parent.SMC_Explorer.Selection_Chemin & ".j.smc", Left(_Parent.SMC_Explorer.Selection_Chemin, InStrRev(_Parent.SMC_Explorer.Selection_Chemin, "\")) & DLG_VirtualKeyboard.Text & _Parent.SMC_Explorer.Selection_Extention & ".j.smc")
            'On modifie les jaquettes permanantes
            For i = 0 To UBound(_Parent.SMC_Explorer.STR_Jaquettes_permantentes)
                If _Parent.SMC_Explorer.STR_Jaquettes_permantentes(i) = _Parent.SMC_Explorer.VideoElements(_Parent.SMC_Explorer.INT_Fichier_PositionAbsolue).Chemin Then _Parent.SMC_Explorer.STR_Jaquettes_permantentes(i) = Left(_Parent.SMC_Explorer.Selection_Chemin, InStrRev(_Parent.SMC_Explorer.Selection_Chemin, "\")) & DLG_VirtualKeyboard.Text & _Parent.SMC_Explorer.Selection_Extention
            Next
            ''On modifie l'element dans la liste
            _Parent.SMC_Explorer.VideoElements(_Parent.SMC_Explorer.INT_Fichier_PositionAbsolue).Nom = DLG_VirtualKeyboard.Text & _Parent.SMC_Explorer.Selection_Extention
            _Parent.SMC_Explorer.VideoElements(_Parent.SMC_Explorer.INT_Fichier_PositionAbsolue).Chemin = Left(_Parent.SMC_Explorer.Selection_Chemin, InStrRev(_Parent.SMC_Explorer.Selection_Chemin, "\")) & DLG_VirtualKeyboard.Text & _Parent.SMC_Explorer.Selection_Extention

            'On rafraichi l'explorer
            _Parent.SMC_Explorer.EXPLORER_Rafraichir()
        End If
    End Sub

    '######################################################################################################################################
    '# Deplacer la selection
    '######################################################################################################################################
    Public Sub Deplacer()
        MediaPortal.GUI.Library.Log.Debug("[SMC] Menu_Contextuel.vb >> Execution de Deplacer()", "")
        Dim DLG_Deplacer As GUIDialogMenu
        Dim STR_Chemins As String()
        Dim STR_Chemin_parent As String
        Dim i As Integer
        Dim OBJ_Repertoire As IO.DirectoryInfo
        Dim OBJ_SousRepertoire As IO.DirectoryInfo

        DLG_Deplacer = GUIWindowManager.GetWindow(GUIWindow.Window.WINDOW_DIALOG_MENU)
        DLG_Deplacer.Reset()
        DLG_Deplacer.ShowQuickNumbers = False
        DLG_Deplacer.SetHeading("DEPLACER: " & _Parent.SMC_Explorer.VideoElements(_Parent.SMC_Explorer.INT_Fichier_PositionAbsolue).Nom)

        ReDim STR_Chemins(-1)

        'Si on est juste apres la racine on liste les repertoires racine
        If _Parent.SMC_Configuration.Video(_Parent.SMC_Explorer.INT_Source_Selection).Chemin = _Parent.SMC_Explorer.STR_Repertoire_Courant Then
            For i = 0 To UBound(_Parent.SMC_Configuration.Video)
                If _Parent.SMC_Configuration.Video(i).Chemin <> _Parent.SMC_Explorer.STR_Repertoire_Courant Then
                    ReDim Preserve STR_Chemins(UBound(STR_Chemins) + 1)
                    STR_Chemins(UBound(STR_Chemins)) = _Parent.SMC_Configuration.Video(i).Chemin
                    DLG_Deplacer.Add("..\" & _Parent.SMC_Configuration.Video(i).Nom)
                End If
            Next
            'Sinon on liste les repertoires parents
        Else
            STR_Chemin_parent = Left(_Parent.SMC_Explorer.STR_Repertoire_Courant, InStrRev(_Parent.SMC_Explorer.STR_Repertoire_Courant, "\") - 1)
            'Pour correction de BUG: Si on arrive a une racine de disque alors il faut ajouter a la fin un "\" (c: NOK;c:\ OK)
            If Right(STR_Chemin_parent, 1) = ":" Then STR_Chemin_parent = STR_Chemin_parent & "\"

            ReDim Preserve STR_Chemins(UBound(STR_Chemins) + 1)
            STR_Chemins(UBound(STR_Chemins)) = STR_Chemin_parent
            DLG_Deplacer.Add("..\")

            OBJ_Repertoire = New IO.DirectoryInfo(STR_Chemin_parent)
            For Each OBJ_SousRepertoire In OBJ_Repertoire.GetDirectories
                If Not Directory.Exists(OBJ_SousRepertoire.FullName & "\VIDEO_TS") And OBJ_SousRepertoire.FullName <> _Parent.SMC_Explorer.STR_Repertoire_Courant Then
                    ReDim Preserve STR_Chemins(UBound(STR_Chemins) + 1)
                    STR_Chemins(UBound(STR_Chemins)) = OBJ_SousRepertoire.FullName
                    DLG_Deplacer.Add("..\" & OBJ_SousRepertoire.Name)
                End If
            Next
        End If

        'on liste egalement les sous repertoires
        OBJ_Repertoire = New IO.DirectoryInfo(_Parent.SMC_Explorer.STR_Repertoire_Courant)
        For Each OBJ_SousRepertoire In OBJ_Repertoire.GetDirectories
            If Not Directory.Exists(OBJ_SousRepertoire.FullName & "\VIDEO_TS") Then
                ReDim Preserve STR_Chemins(UBound(STR_Chemins) + 1)
                STR_Chemins(UBound(STR_Chemins)) = OBJ_SousRepertoire.FullName
                DLG_Deplacer.Add(OBJ_SousRepertoire.Name)
            End If
        Next


        DLG_Deplacer.DoModal(GUIWindowManager.ActiveWindow)
        If DLG_Deplacer.SelectedLabel >= 0 Then
            If _Parent.SMC_Explorer.Selection_Type = 2 Then
                Directory.Move(_Parent.SMC_Explorer.Selection_Chemin, STR_Chemins(DLG_Deplacer.SelectedLabel) & "\" & _Parent.SMC_Explorer.VideoElements(_Parent.SMC_Explorer.INT_Fichier_PositionAbsolue).Nom)
            Else
                File.Move(_Parent.SMC_Explorer.Selection_Chemin, STR_Chemins(DLG_Deplacer.SelectedLabel) & "\" & _Parent.SMC_Explorer.VideoElements(_Parent.SMC_Explorer.INT_Fichier_PositionAbsolue).Nom)
            End If
            If File.Exists(_Parent.SMC_Explorer.Selection_Chemin & ".smc") Then File.Move(_Parent.SMC_Explorer.Selection_Chemin & ".smc", STR_Chemins(DLG_Deplacer.SelectedLabel) & "\" & _Parent.SMC_Explorer.VideoElements(_Parent.SMC_Explorer.INT_Fichier_PositionAbsolue).Nom & ".smc")
            If File.Exists(_Parent.SMC_Explorer.Selection_Chemin & ".j.smc") Then File.Move(_Parent.SMC_Explorer.Selection_Chemin & ".j.smc", STR_Chemins(DLG_Deplacer.SelectedLabel) & "\" & _Parent.SMC_Explorer.VideoElements(_Parent.SMC_Explorer.INT_Fichier_PositionAbsolue).Nom & ".j.smc")

            'On retire l'element de la liste
            If UBound(_Parent.SMC_Explorer.VideoElements) > 0 Then
                For i = _Parent.SMC_Explorer.INT_Fichier_PositionAbsolue To UBound(_Parent.SMC_Explorer.VideoElements) - 1
                    _Parent.SMC_Explorer.VideoElements(i) = _Parent.SMC_Explorer.VideoElements(i + 1)
                Next
            End If
            ReDim Preserve _Parent.SMC_Explorer.VideoElements(UBound(_Parent.SMC_Explorer.VideoElements) - 1)

            'S'il n'est pas en haut, on monte le curseur
            If _Parent.SMC_Explorer.INT_Fichier_PositionAbsolue > 0 Then
                _Parent.SMC_Explorer.INT_Fichier_PositionAbsolue -= 1
                _Parent.SMC_Explorer.INT_Fichier_PositionRelative -= 1
            End If

            'On rafraichi l'explorer
            _Parent.SMC_Explorer.EXPLORER_Rafraichir()
        End If
    End Sub

End Class
